package com.example.service;

import com.example.dto.InternalMessageDTO;
import com.example.exception.BusinessException;
import com.example.model.InternalMessageDO;
import java.util.List;

/**
 * <p>
 *   站内信Service接口
 * </p>
 * @author 34448
 */
public interface InternalMessageService {

    /**
     * 发送站内信
     *
     * @param internalMessageDTO 站内信信息
     * @return
     * @throws BusinessException 发送者或接收者不存在时抛出异常
     */
    boolean sendMessage(InternalMessageDTO internalMessageDTO);

    /**
     * 查询收件箱
     *
     * @param userId 用户ID
     * @return 收件箱信息列表
     * @throws BusinessException 用户不存在时抛出异常
     */
    List<InternalMessageDO> getInbox(Integer userId);

    /**
     * 标记消息为已读
     *
     * @param messageId 消息ID
     * @return
     * @throws BusinessException 消息不存在时抛出异常
     */
    boolean markAsRead(Integer messageId);

    /**
     * 删除站内信
     *
     * @param messageId 消息ID
     * @return
     * @throws BusinessException 消息不存在时抛出异常
     */
    boolean deleteMessage(Integer messageId);

    /**
     * 发送通知邮件
     *
     * @param userId 用户ID
     * @param subject 主题
     * @param body 正文
     * @return
     * @throws BusinessException 用户不存在时抛出异常
     */
    boolean sendNotificationEmail(Integer userId, String subject, String body);

    /**
     * 发送OTP动态邮件验证
     *
     * @param userId 用户ID
     * @return
     * @throws BusinessException 用户不存在时抛出异常
     */
    boolean sendOTPEmail(Integer userId);

    /**
     * 验证OTP动态邮件验证码
     *
     * @param userId 用户ID
     * @param otpCode 验证码
     * @return
     * @throws BusinessException 用户不存在或验证码错误时抛出异常
     */
    boolean verifyOTP(Integer userId, String otpCode);
}